home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 6 / CU Amiga Magazine's Super CD-ROM 06 (1996)(EMAP Images)(GB)(Track 1 of 4)[!][issue 1997-01].iso / cucd / prog / gnu-c / libauto / readme < prev    next >
Text File  |  1994-08-05  |  4KB  |  112 lines

  1.    The contents of this archive are COPYRIGHT by Markus M. Wild (C) 1992.
  2.  
  3.    The contents are subject to the GNU General Public License (included
  4.    in the file `COPYING').
  5.  
  6.    As a special exception, if you link this library with files
  7.    compiled with GCC to produce an executable, this does not cause
  8.    the resulting executable to be covered by the GNU General Public License.
  9.    This exception does not however invalidate any other reasons why
  10.    the executable file might be covered by the GNU General Public License.
  11.  
  12.  
  13. This is an experimental library package for gcc (used with the GNU ld linker)
  14. that allows you to automatically open/close shared Amiga libraries, as long
  15. as the library base in question is referenced as an external symbol.
  16.  
  17. Thus, in the following simple program, the <inline/intuition.h> file 
  18. references `IntuitionBase' as an external reference:
  19.  
  20. -----------------------------------------------------------------------------
  21.  
  22. #include <exec/types.h>
  23. #include <intuition/intuition.h>
  24.  
  25. #include <inline/intuition.h>
  26.  
  27. main()
  28. {
  29.   long secs, mics;
  30.  
  31.   CurrentTime (&secs, &mics);
  32.   printf ("%d, %d\n", secs, mics);
  33. }
  34.  
  35. -----------------------------------------------------------------------------
  36.  
  37. If you don't link with -lauto, you get an unresolved symbol error, which
  38. is a healthy thing.. (so *don't* define IntuitionBase in your program, or
  39. the linker won't have a chance to notice you didn't specify -lauto !!!)
  40.  
  41. To compile this program, use for example:
  42.  
  43.   gcc test.c -o test -lauto
  44.  
  45.  
  46. Good luck! I generated entries for the libraries I had fd files for, look
  47. at the Makefile as a guideline how to add new entries for new libraries.
  48.  
  49. If you want to restrict automatic opening of a certain library to a 
  50. specific version number (say to allow only 2.0 libraries), you can define
  51. an __auto* version variable. The correct name for each library is 
  52. __auto_XYZ_vers, where XYZ is the name (lowercase) of the fd file without
  53. the "_lib.fd" ending. Thus in the above example, having
  54.  
  55. -----------------------------------------------------------------------------
  56.  
  57. int __auto_intuition_vers = 37;
  58.  
  59. main()
  60. {
  61.  ...
  62. -----------------------------------------------------------------------------
  63.  
  64. would only allow a version 37 intuition library to be used (not too
  65. reasonable with CurrentTime() though ;-)).
  66.  
  67.  
  68. HOW IT WORKS
  69. ------------
  70. Simplified: to support C++, GNU ld supports the concept of constructors and
  71. destructors. These are functions that are called before rsp. after the
  72. main() function is executed. What libauto.a does is provide object files
  73. that export library bases. In each of those files, constructors and
  74. destructors are provided that call OpenLibrary() on the library in question
  75. (and CloseLibrary() in the destructor). That way, main() never has to
  76. open any libraries itself, it can rely on the fact that it gets initialized
  77. library bases, and that the libraries are closed after the program
  78. terminates.
  79.  
  80. If you want to know how it really works, look at base.c ;-)) (constructors
  81. and destructors are not supported as is, they are implemented on top of
  82. SET objects).
  83.  
  84.                 *********
  85.                 IMPORTANT
  86.                 *********
  87.  
  88. o Destructors (that close the libraries!) are only called if you never call
  89.   _exit() in your program! If you call _exit(), your automatically opened
  90.   libraries are never closed!
  91.  
  92. o Calling of constructors only works if you compile your main file (the
  93.   file containing a main() function) with gcc2.0 !! gcc-1.40 doesn't generate
  94.   a call to initialize constructors !!
  95.  
  96.  
  97.  
  98. This is a highly experimental library that I made up because I got some
  99. requests for this feature (DICE seems to support this as well in a similar
  100. yet not identical way). Please tell me about problems you find, or about
  101. things you'd prefer to be done in a different way. I'm open to any 
  102. reasonable suggestions, as this is a feature I won't use too often myself,
  103. since I don't regularly program with Amiga libraries other than Exec and
  104. DOS...
  105.  
  106. -Markus Wild
  107.  
  108.    <wild@nessie.cs.id.ethz.ch>   or   <wild@amiga.physik.unizh.ch>
  109.  
  110. send flames to <bitbucket@nessie.cs.id.ethz.ch> (but don't overflood
  111. nessie's /dev/null please ;-)).
  112.